﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Csla;
using Csla.Serialization;

namespace Sireass.Bl
{
    [Serializable]
    public class UsuarioUpdater : CommandBase<UsuarioUpdater>
    {
        public static readonly PropertyInfo<PersonaEdit> PersonaProperty = RegisterProperty<PersonaEdit>(c => c.Persona);
        public PersonaEdit Persona
        {
            get { return ReadProperty(PersonaProperty); }
            private set { LoadProperty(PersonaProperty, value); }
        }

        public static readonly PropertyInfo<AdministrativoEdit> AdministrativoProperty = RegisterProperty<AdministrativoEdit>(c => c.Administrativo);
        public AdministrativoEdit Administrativo
        {
            get { return ReadProperty(AdministrativoProperty); }
            private set { LoadProperty(AdministrativoProperty, value); }
        }

        public static readonly PropertyInfo<UsuarioEdit> UsuarioProperty = RegisterProperty<UsuarioEdit>(c => c.Usuario);
        public UsuarioEdit Usuario
        {
            get { return ReadProperty(UsuarioProperty); }
            private set { LoadProperty(UsuarioProperty, value); }
        }
      
        public static void Update(PersonaEdit persona, AdministrativoEdit administrativo, UsuarioEdit usuario, EventHandler<DataPortalResult<UsuarioUpdater>> callback)
        {
            var cmd = new UsuarioUpdater { Persona = persona, Administrativo = administrativo, Usuario = usuario };
            DataPortal.BeginExecute<UsuarioUpdater>(cmd, callback);
        }

        public static UsuarioUpdater Update(PersonaEdit persona, AdministrativoEdit administrativo, UsuarioEdit usuario)
        {
            var cmd = new UsuarioUpdater { Persona = persona, Administrativo = administrativo, Usuario = usuario};
            return DataPortal.Execute<UsuarioUpdater>(cmd);
        }

        [Transactional(TransactionalTypes.TransactionScope)]
        protected override void DataPortal_Execute()
        {
            using (var dalManager = Sireass.Dal.DalFactory.GetManager())
            {
                if (Persona.IsNew)
                {
                    Persona = Persona.Save();
                    Administrativo.IdPersonaAdministrativo = Persona.IdPersona;
                    Administrativo = Administrativo.Save();
                    Usuario.IdPersona = Persona.IdPersona;
                    Usuario = Usuario.Save();
                }
                else {
                     Usuario = Usuario.Save();
                    Administrativo = Administrativo.Save();
                     Persona = Persona.Save();
                }
            }
        }

    }
}
